package Stream;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 *
 * Stream流式计算
 *
 *
 * @author shkstart
 * @create 2021-03-10 21:12
 */
//实体类
class user{

    private int id;
    private String name;
    private int age;

    public user() {
    }

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public user(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
/**
 * 题目：请按照给出数据，找出同时满足以下条件的用户
 * 也即以下条件：
 * 1、全部满足偶数ID
 * 2、年龄大于24
 * 3、用户名转为大写
 * 4、用户名字母倒排序
 * 5、只输出一个用户名字 limit
 **/
public class StreamDemo {

    public static void main(String[] args) {

        user user1 = new user(11,"a",23);
        user user2 = new user(12,"b",24);
        user user3 = new user(13,"c",25);
        user user4 = new user(14,"d",26);


        List<user> users = Arrays.asList(user1, user2, user3, user4);

// boolean test(T t);
//  拷贝小括号(形参列表也可以想象成实现类的形参)，写死右箭头 ->，落地大括号 {方法实现}

/**
* 1. 首先我们需要将 list 转化为stream流
* 2. 然后将用户过滤出来，这里用到一个函数式接口Predicate<? super T>，我们可以使用lambda表达式简化
* 3. 这里面传递的参数，就是Stream流的泛型类型，也就是User，所以，这里可以直接返回用户id为偶数的用户信息;
 * 4. 通过forEach进行遍历，直接简化输出 System.out::println ，等价于System.out.println(u);
**/

     users.stream()
                .filter(u -> { return u.getId() % 2 == 0; })
                .map(u -> { return u.getName().toUpperCase(); })
                .limit(1)
                .forEach(System.out::println);

    }

}
